<?xml version="1.0"?>
<doc>
    <assembly>
        <name>DeftTech.DuckTyping</name>
    </assembly>
    <members>
        <member name="T:DeftTech.DuckTyping.AmbiguousTypesException">
            <summary>
            Exception thrown when two types cannot be distinguished from one another in a way that enables comparison.
            </summary>
        </member>
        <member name="M:DeftTech.DuckTyping.AmbiguousTypesException.#ctor(System.Type,System.Type)">
            <summary>
            Constructs an object.
            </summary>
            <param name="type1">First type.</param>
            <param name="type2">Second type.</param>
        </member>
        <member name="P:DeftTech.DuckTyping.AmbiguousTypesException.Type1">
            <summary>
            Gets the first type.
            </summary>
        </member>
        <member name="P:DeftTech.DuckTyping.AmbiguousTypesException.Type2">
            <summary>
            Gets the second type.
            </summary>
        </member>
        <member name="T:DeftTech.DuckTyping.DelegateDuckCaster">
            <summary>
            Duck casting strategy used to cast two delegate types.
            </summary>
        </member>
        <member name="T:DeftTech.DuckTyping.IDuckCaster">
            <summary>
            Interface for strategies of duck casting.
            </summary>
        </member>
        <member name="M:DeftTech.DuckTyping.IDuckCaster.ShouldCast(System.Type,System.Type)">
            <summary>
            Determines whether this duck caster should be used to perform the given cast.
            </summary>
            <param name="toType">Type to be casted to.</param>
            <param name="fromType">Type of object to be casted.</param>
            <returns>If this duck caster should be used to perform the given cast, true; otherwise, false.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.IDuckCaster.ShouldUncast(System.Object)">
            <summary>
            Determines whether this duck caster needs to perform an uncasting operation before the 
            duck is casted to another type.
            </summary>
            <remarks>
            If the given object is a proxy generated by this strategy, true should be returned.  This
            prevents proxies to proxies being generated.  If true is returned here, DuckTyping will 
            respond by calling Uncast.
            </remarks>
            <param name="duck">The object to be casted.</param>
            <returns>If this duck caster needs to perform an uncasting operation before the duck is casted to another type, true; otherwise, false.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.IDuckCaster.CanCast(System.Type,System.Type)">
            <summary>
            Determines whether a given cast is valid.
            </summary>
            <param name="toType">Type to be casted to.</param>
            <param name="fromType">The object to be casted.</param>
            <returns>If the given cast is valid, true; otherwise, false.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.IDuckCaster.CouldUncast(System.Type,System.Type)">
            <summary>
            Determines whether a given uncast operation might be possible without knowing the actual casted object.
            </summary>
            <param name="originalType">Original type to be uncasted to.</param>
            <param name="castedType">The type of the casted object.</param>
            <returns>If the given uncast operation might be possible, true; otherwise, false.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.IDuckCaster.PrepareCast(System.Type,System.Type)">
            <summary>
            Prepares for a given cast by performing all necessary overhead.
            </summary>
            <param name="toType">Type to be casted to.</param>
            <param name="fromType">The object to be casted.</param>
        </member>
        <member name="M:DeftTech.DuckTyping.IDuckCaster.Cast(System.Type,System.Object)">
            <summary>
            Performs a given cast.
            </summary>
            <param name="toType">Type to be casted to.</param>
            <param name="duck">The object to cast.</param>
            <returns>The casted object.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.IDuckCaster.Uncast(System.Object)">
            <summary>
            Uncasts a given object.
            </summary>
            <remarks>
            This method should only be called if ShouldUncast returns true.
            </remarks>
            <param name="duck">The object to uncast.</param>
            <returns>The uncasted object.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.DelegateDuckCaster.#cctor">
            <summary>
            Initializes static members.
            </summary>
        </member>
        <member name="M:DeftTech.DuckTyping.DelegateDuckCaster.#ctor">
            <summary>
            Constructs an object.
            </summary>
        </member>
        <member name="M:DeftTech.DuckTyping.DelegateDuckCaster.GetProxyType(System.Type,System.Type)">
            <summary>
            Gets the DelegateDuckProxyType object for a given duck type.
            </summary>
            <param name="toType">Type to be casted to.</param>
            <param name="fromType">Type of delegate to be casted.</param>
            <returns>The duck proxy type to use to cast or prepare for casting.</returns>
        </member>
        <member name="T:DeftTech.DuckTyping.DelegateDuckProxyType">
            <summary>
            Class that performs the generation of duck proxy types for forwarding delegate calls.
            </summary>
        </member>
        <member name="M:DeftTech.DuckTyping.DelegateDuckProxyType.#ctor(System.Type,System.Type)">
            <summary>
            Constructs an object.
            </summary>
            <param name="toDelegateType">Type to be casted to.</param>
            <param name="fromDelegateType">Type of delegate to be casted.</param>
        </member>
        <member name="M:DeftTech.DuckTyping.DelegateDuckProxyType.CanProxy">
            <summary>
            Determines whether a proxy can be generated for the types given in the constructor.
            </summary>
            <returns>If a proxy can be generated for the types given in the constructor, true; otherwise, false.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.DelegateDuckProxyType.Prepare">
            <summary>
            Prepares by generating the proxy type for the types given in the constructor.
            </summary>
        </member>
        <member name="M:DeftTech.DuckTyping.DelegateDuckProxyType.WrapDuck(System.Delegate)">
            <summary>
            Calls the static WrapDuck method of the generated proxy type to initialize a new instance of
            the proxy type with a given duck delegate and return a delegate to its invoke method.
            </summary>
            <param name="duck">Duck delegate that the new proxy object should forward calls to.</param>
            <returns>A delegate of the type given in the constructor that calls the given duck delegate.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.DelegateDuckProxyType.GenerateProxyType">
            <summary>
            If a proxy type has not been generated yet, generates a proxy type that defines a method 
            matching the method signature of the to delegate type given in the constructor which forwards 
            calls to a delegate of the from type given in the constructor.
            </summary>
        </member>
        <member name="M:DeftTech.DuckTyping.DelegateDuckProxyType.ImplementInvokeMethod(System.Reflection.Emit.TypeBuilder,System.Reflection.FieldInfo)">
            <summary>
            Implements the method of the proxy type that invokes the delegate given in its constructor.
            </summary>
            <param name="proxyType">Type builder to define the invoke method in.</param>
            <param name="duckDelegateField">Field that stores a reference to the delegate to call.</param>
            <returns>The implemented invoke method.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.DelegateDuckProxyType.GetParameterTypes(System.Reflection.ParameterInfo[])">
            <summary>
            Utility to create an array of parameter types from an array of parameters.
            </summary>
            <param name="parameters">Array of parameters to return the parameter types of.</param>
            <returns>An array of parameter types of the given method.</returns>
        </member>
        <member name="T:DeftTech.DuckTyping.EnumStringDuckCaster">
            <summary>
            Duck casting strategy used to cast between enums and strings.
            </summary>
        </member>
        <member name="M:DeftTech.DuckTyping.EnumStringDuckCaster.#ctor">
            <summary>
            Constructs an object.
            </summary>
        </member>
        <member name="T:DeftTech.DuckTyping.FromTypeTree`1">
            <summary>
            Tree to refer to T objects by from type.
            </summary>
            <typeparam name="T">Type of object to store.</typeparam>
        </member>
        <member name="M:DeftTech.DuckTyping.FromTypeTree`1.#ctor">
            <summary>
            Constructs an object.
            </summary>
        </member>
        <member name="M:DeftTech.DuckTyping.FromTypeTree`1.ContainsKey(System.Type)">
            <summary>
            Determines whether a T object exists for the given from type.
            </summary>
            <param name="fromType">From type to search for.</param>
            <returns>If a T object exists for the given from type, true; otherwise, false.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.FromTypeTree`1.Add(System.Type,`0)">
            <summary>
            Adds a T object to the tree.
            </summary>
            <param name="fromType">From type for the object.</param>
            <param name="item">The object to add.</param>
        </member>
        <member name="M:DeftTech.DuckTyping.FromTypeTree`1.GetKeyFromType(System.Type)">
            <summary>
            Gets the key to use to uniquely identify a given type in the internal tree.
            </summary>
            <remarks>
            This method is also in ToTypeFromTypeTree, so don't forget to update it there 
            also if it is updated here.
            </remarks>
            <param name="type">Type to get the key of.</param>
            <returns>The key to use to uniquely identify the given type in the internal tree.</returns>
        </member>
        <member name="P:DeftTech.DuckTyping.FromTypeTree`1.Item(System.Type)">
            <summary>
            Gets the T object for a given from type.
            </summary>
            <param name="fromType">From type for the object.</param>
            <returns>The object for the given from type.</returns>
        </member>
        <member name="T:DeftTech.DuckTyping.InterfaceDuckCaster">
            <summary>
            Duck casting strategy that casts an object to an interface.
            </summary>
        </member>
        <member name="M:DeftTech.DuckTyping.InterfaceDuckCaster.#cctor">
            <summary>
            Initializes static members.
            </summary>
        </member>
        <member name="M:DeftTech.DuckTyping.InterfaceDuckCaster.#ctor">
            <summary>
            Constructs an object.
            </summary>
        </member>
        <member name="M:DeftTech.DuckTyping.InterfaceDuckCaster.GetProxyType(System.Type,System.Type)">
            <summary>
            Gets the InterfaceDuckProxyType object for a given cast.
            </summary>
            <remarks>
            First, the most general type in the inheritance chain of the given type that implements all the 
            members of TInterface is selected.  Then if a proxy type has already been generated, it returns 
            it.  Finally, if not, it creates a new object and adds it to the dictionary.
            </remarks>
            <param name="interfaceType">Type to cast to.</param>
            <param name="duckType">Type of object being casted.</param>
            <returns>The duck proxy type to use to cast or prepare for casting.</returns>
        </member>
        <member name="T:DeftTech.DuckTyping.InterfaceDuckProxyType">
            <summary>
            Class that performs the generation of duck proxy types for the dynamic implementation of interfaces.
            </summary>
        </member>
        <member name="M:DeftTech.DuckTyping.InterfaceDuckProxyType.#ctor(System.Type,System.Type,System.Boolean)">
            <summary>
            Constructs an object.
            </summary>
            <param name="interfaceType">Type to be casted to.</param>
            <param name="duckType">Type of object to be casted.</param>
            <param name="isDuckStatic">Whether or not the duck is a static class instead of an object instance.</param>
        </member>
        <member name="M:DeftTech.DuckTyping.InterfaceDuckProxyType.CanProxy">
            <summary>
            Determines whether a proxy can be generated for the types given in the constructor.
            </summary>
            <returns>If a proxy can be generated for the types given in the constructor, true; otherwise, false.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.InterfaceDuckProxyType.Prepare">
            <summary>
            Prepares by generating the proxy type for the types given in the constructor.
            </summary>
        </member>
        <member name="M:DeftTech.DuckTyping.InterfaceDuckProxyType.WrapDuck(System.Object)">
            <summary>
            Calls the static WrapDuck method of the generated proxy type to initialize a new instance of
            the proxy type with a given duck object.
            </summary>
            <param name="duck">Duck object that the new proxy object should forward calls to.</param>
            <returns>
            An instance of the proxy type, which implements the interface type given in the constructor, initialized with 
            the given duck object.
            </returns>
        </member>
        <member name="M:DeftTech.DuckTyping.InterfaceDuckProxyType.GetStaticProxy">
            <summary>
            Gets an instance of the proxy type that forwards calls to the static members of the duck type.
            </summary>
            <returns>
            An instance of the proxy type, which implements the interface type given in the constructor and forwards calls to
            the static members of the duck type.
            </returns>
        </member>
        <member name="M:DeftTech.DuckTyping.InterfaceDuckProxyType.GenerateProxyType">
            <summary>
            If a proxy type has not been generated yet, generates a proxy type that implements 
            the interface type given in the constructor and forwards calls to an object of the 
            duck type given in the constructor.
            </summary>
        </member>
        <member name="M:DeftTech.DuckTyping.InterfaceDuckProxyType.ImplementMember(System.Reflection.Emit.TypeBuilder,DeftTech.DuckTyping.InterfaceDuckProxyType.ProxyMemberDictionary,System.Reflection.FieldInfo,System.Reflection.Emit.ILGenerator,System.Reflection.MemberInfo)">
            <summary>
            Implements an interface member in a duck proxy type using a given type builder.
            If successful, the implemented member will be added to the given proxy member dictionary.
            </summary>
            <param name="proxyType">Type builder for the duck proxy type.</param>
            <param name="proxyMembers">Dictionary of members of the proxy type.</param>
            <param name="duckField">Field that holds a reference to the duck object to forward calls to.</param>
            <param name="constructorIL">IL generator to use to add code to the constructor if necessary.</param>
            <param name="interfaceMember">The interface member to implement.</param>
        </member>
        <member name="M:DeftTech.DuckTyping.InterfaceDuckProxyType.ImplementMethod(System.Reflection.Emit.TypeBuilder,DeftTech.DuckTyping.InterfaceDuckProxyType.ProxyMemberDictionary,System.Reflection.FieldInfo,System.Reflection.Emit.ILGenerator,System.Reflection.MethodInfo)">
            <summary>
            Implements an interface method in a duck proxy type using a given type builder.
            If successful, the implemented method will be added to the given proxy member dictionary.
            </summary>
            <param name="proxyType">Type builder for the duck proxy type.</param>
            <param name="proxyMembers">Dictionary of members of the proxy type.</param>
            <param name="duckField">Field that holds a reference to the duck object to forward calls to.</param>
            <param name="constructorIL">IL generator to use to add code to the constructor if necessary.</param>
            <param name="interfaceMethod">The interface method to implement.</param>
        </member>
        <member name="M:DeftTech.DuckTyping.InterfaceDuckProxyType.ImplementProperty(System.Reflection.Emit.TypeBuilder,DeftTech.DuckTyping.InterfaceDuckProxyType.ProxyMemberDictionary,System.Reflection.FieldInfo,System.Reflection.Emit.ILGenerator,System.Reflection.PropertyInfo)">
            <summary>
            Implements an interface property in a duck proxy type using a given type builder.
            If successful, the implemented property will be added to the given proxy member dictionary.
            </summary>
            <param name="proxyType">Type builder for the duck proxy type.</param>
            <param name="proxyMembers">Dictionary of members of the proxy type.</param>
            <param name="duckField">Field that holds a reference to the duck object to forward calls to.</param>
            <param name="constructorIL">IL generator to use to add code to the constructor if necessary.</param>
            <param name="interfaceProperty">The interface property to implement.</param>
        </member>
        <member name="M:DeftTech.DuckTyping.InterfaceDuckProxyType.ImplementEvent(System.Reflection.Emit.TypeBuilder,DeftTech.DuckTyping.InterfaceDuckProxyType.ProxyMemberDictionary,System.Reflection.FieldInfo,System.Reflection.Emit.ILGenerator,System.Reflection.EventInfo)">
            <summary>
            Implements an interface event in a duck proxy type using a given type builder.
            If successful, the implemented event will be added to the given proxy member dictionary.
            </summary>
            <param name="proxyType">Type builder for the duck proxy type.</param>
            <param name="proxyMembers">Dictionary of members of the proxy type.</param>
            <param name="duckField">Field that holds a reference to the duck object to forward calls to.</param>
            <param name="constructorIL">IL generator to use to add code to the constructor if necessary.</param>
            <param name="interfaceEvent">The interface event to implement.</param>
        </member>
        <member name="M:DeftTech.DuckTyping.InterfaceDuckProxyType.DuckImplementsAllMembers">
            <summary>
            Determines whether the type given in the constructor implements all the members of TInterface.
            </summary>
            <returns>If the type given in the constructor implements all the members of TInterface, true; otherwise, false.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.InterfaceDuckProxyType.DuckImplementsMember(System.Reflection.MemberInfo)">
            <summary>
            Determines whether the type given in the constructor implements a given interface member.
            </summary>
            <remarks>
            This method is used in determining whether an object of a given type can be duck typed to TInterface.
            </remarks>
            <param name="interfaceMember">Interface member to check for.</param>
            <returns>If the type given in the constructor implements the given interface member, true; otherwise, false.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.InterfaceDuckProxyType.FindDuckMethod(System.Reflection.MethodInfo)">
            <summary>
            Finds the duck implementation for a given interface method.
            </summary>
            <param name="interfaceMethod">Interface method to find the implementation of.</param>
            <returns>If the type given in the constructor implements the given interface method, such method; otherwise, null.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.InterfaceDuckProxyType.FindDuckProperty(System.Reflection.PropertyInfo)">
            <summary>
            Finds the duck implementation for a given interface property.
            </summary>
            <param name="interfaceProperty">Interface property to find the implementation of.</param>
            <returns>If the type given in the constructor implements the given interface property, such property; otherwise, null.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.InterfaceDuckProxyType.FindDuckEvent(System.Reflection.EventInfo)">
            <summary>
            Finds the duck implementation for a given interface event.
            </summary>
            <param name="interfaceEvent">Interface event to find the implementation of.</param>
            <returns>If the type given in the constructor implements the given interface event, such event; otherwise, null.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.InterfaceDuckProxyType.GetParameterTypes(System.Reflection.ParameterInfo[])">
            <summary>
            Utility to create an array of parameter types from an array of parameters.
            </summary>
            <param name="parameters">Array of parameters to return the parameter types of.</param>
            <returns>An array of parameter types of the given method.</returns>
        </member>
        <member name="P:DeftTech.DuckTyping.InterfaceDuckProxyType.InterfaceType">
            <summary>
            Gets the interface type to be casted to.
            </summary>
        </member>
        <member name="P:DeftTech.DuckTyping.InterfaceDuckProxyType.DuckType">
            <summary>
            Gets the duck type to be casted.
            </summary>
        </member>
        <member name="P:DeftTech.DuckTyping.InterfaceDuckProxyType.IsDuckStatic">
            <summary>
            Gets whether the duck is a static class instead of an object instance.
            </summary>
        </member>
        <member name="T:DeftTech.DuckTyping.InterfaceDuckProxyType.ProxyMemberDictionary">
            <summary>
            Class for keeping track of member builders while implementing proxy members.
            The key is the duck member that is called by the proxy.  The value is the proxy member that calls it.
            </summary>
            <remarks>
            This was defined in case it is decided to change the class later.
            </remarks>
        </member>
        <member name="T:DeftTech.DuckTyping.DuckTyping">
            <summary>
            Class for casting objects using "duck typing".  Casting will succeed if a given duck type implements
            all the members of an interface even though it does not explicitly implement said interface at 
            compile time.  Hence, implementation of interfaces is moved to runtime.  Also supports delegate 
            casting.
            </summary>
        </member>
        <member name="M:DeftTech.DuckTyping.DuckTyping.#cctor">
            <summary>
            Initializes static members.
            </summary>
        </member>
        <member name="M:DeftTech.DuckTyping.DuckTyping.Cast``1(System.Object)">
            <summary>
            Casts an object using duck typing.
            </summary>
            <remarks>
            This method will use a normal cast if one is possible.
            </remarks>
            <typeparam name="T">Type to cast to.</typeparam>
            <param name="duck">Object to cast.</param>
            <returns>A T casting of the given duck object.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.DuckTyping.Cast(System.Type,System.Object)">
            <summary>
            Casts an object using duck typing.
            </summary>
            <remarks>
            This method will use a normal cast if one is possible.
            </remarks>
            <param name="toType">Type to cast to.</param>
            <param name="duck">Object to cast.</param>
            <returns>A casting of the given duck object to the given type.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.DuckTyping.StaticCast``1(System.Type)">
            <summary>
            Casts a static type to an object using duck typing.
            </summary>
            <typeparam name="T">Type to cast to.</typeparam>
            <param name="staticType">Static type to cast.</param>
            <returns>A casting of the given static type.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.DuckTyping.StaticCast(System.Type,System.Type)">
            <summary>
            Casts a static type to an object using duck typing.
            </summary>
            <param name="toType">Type to cast to.</param>
            <param name="staticType">Static type to cast.</param>
            <returns>A casting of the given static type.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.DuckTyping.Uncast(System.Object)">
            <summary>
            If the given object is a duck casted object, uncasts the object to retrieve the original duck object.
            </summary>
            <param name="duck">Object that may be duck casted.</param>
            <returns>If the given object is duck casted, the original duck object; otherwise, the same object that was given.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.DuckTyping.CanCast``1(System.Object)">
            <summary>
            Determines whether a given object can be casted to a given type.
            </summary>
            <typeparam name="T">Type to cast to.</typeparam>
            <param name="duck">The object to cast.</param>
            <returns>If the given object can be casted to the given to type, true; otherwise, false.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.DuckTyping.CanCast(System.Type,System.Object)">
            <summary>
            Determines whether a given object can be casted to a given type.
            </summary>
            <param name="toType">Type to cast to.</param>
            <param name="duck">The object to cast.</param>
            <returns>If the given object can be casted to the given to type, true; otherwise, false.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.DuckTyping.CanCast``2">
            <summary>
            Determines whether a type can be casted to another type.
            </summary>
            <typeparam name="TTo">Type to cast to.</typeparam>
            <typeparam name="TFrom">Type of object to be casted.</typeparam>
            <returns>If an object of the given from type can be casted to the given to type, true; otherwise, false.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.DuckTyping.CanCast``1(System.Type)">
            <summary>
            Determines whether a type can be casted to type T.
            </summary>
            <typeparam name="T">Type to cast to.</typeparam>
            <param name="duckType">Type of object to be casted.</param>
            <returns>If an object of the given type can be casted to T, true; otherwise, false.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.DuckTyping.CanCast(System.Type,System.Type)">
            <summary>
            Determines whether a type can be casted to another type.
            </summary>
            <param name="toType">Type to cast to.</param>
            <param name="fromType">Type of object to be casted.</param>
            <returns>If an object of the given from type can be casted to the given to type, true; otherwise, false.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.DuckTyping.CanStaticCast``1(System.Type)">
            <summary>
            Determines whether a static type can be casted to another type.
            </summary>
            <typeparam name="T">Type to cast to.</typeparam>
            <param name="staticType">Static type to be casted.</param>
            <returns>If the given static type can be casted to the given to type, true; otherwise, false.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.DuckTyping.CanStaticCast(System.Type,System.Type)">
            <summary>
            Determines whether a static type can be casted to another type.
            </summary>
            <param name="toType">Type to cast to.</param>
            <param name="staticType">Static type to be casted.</param>
            <returns>If the given static type can be casted to the given to type, true; otherwise, false.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.DuckTyping.PrepareCast``1(System.Object)">
            <summary>
            Prepares for a duck casting operation by performing all the necessary overhead.
            </summary>
            <typeparam name="T">Type to be casted to.</typeparam>
            <param name="duck">The object to be casted.</param>
        </member>
        <member name="M:DeftTech.DuckTyping.DuckTyping.PrepareCast(System.Type,System.Object)">
            <summary>
            Prepares for a duck casting operation by performing all the necessary overhead.
            </summary>
            <param name="toType">Type to be casted to.</param>
            <param name="duck">The object to be casted.</param>
        </member>
        <member name="M:DeftTech.DuckTyping.DuckTyping.PrepareCast``2">
            <summary>
            Prepares for a duck casting operation by performing all the necessary overhead.
            </summary>
            <typeparam name="TTo">Type to be casted to.</typeparam>
            <typeparam name="TFrom">Type of object to be casted.</typeparam>
        </member>
        <member name="M:DeftTech.DuckTyping.DuckTyping.PrepareCast``1(System.Type)">
            <summary>
            Prepares for a duck casting operation by performing all the necessary overhead.
            </summary>
            <typeparam name="T">Type to be casted to.</typeparam>
            <param name="duckType">Type of object to be casted.</param>
        </member>
        <member name="M:DeftTech.DuckTyping.DuckTyping.PrepareCast(System.Type,System.Type)">
            <summary>
            Prepares for a duck casting operation by performing all the necessary overhead.
            </summary>
            <param name="toType">Type to be casted to.</param>
            <param name="fromType">Type of object to be casted.</param>
        </member>
        <member name="M:DeftTech.DuckTyping.DuckTyping.PrepareStaticCast``1(System.Type)">
            <summary>
            Prepares for a static duck casting operation by performing all the necessary overhead.
            </summary>
            <typeparam name="T">Type to be casted to.</typeparam>
            <param name="staticType">Static type to be casted.</param>
        </member>
        <member name="M:DeftTech.DuckTyping.DuckTyping.PrepareStaticCast(System.Type,System.Type)">
            <summary>
            Prepares for a static duck casting operation by performing all the necessary overhead.
            </summary>
            <param name="toType">Type to be casted to.</param>
            <param name="staticType">Static type to be casted.</param>
        </member>
        <member name="M:DeftTech.DuckTyping.DuckTyping.AreTypesCompatible(System.Type,System.Type,System.Boolean)">
            <summary>
            Determines whether two types are compatible.
            </summary>
            <param name="toType">Type to be casted to.</param>
            <param name="fromType">Type of object to be casted.</param>
            <param name="bidirectionalContext">Whether to also check the reverse of the given conversion when checking for an infinite loop.</param>
            <returns>If the given types are compatible, true; otherwise, false.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.DuckTyping.AreTypesCompatible(System.Type,System.Type)">
            <summary>
            Determines whether two types are compatible.
            </summary>
            <param name="toType">Type to be casted to.</param>
            <param name="fromType">Type of object to be casted.</param>
            <returns>If the given types are compatible, true; otherwise, false.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.DuckTyping.GetTypeCompatibilityScore(System.Type,System.Type)">
            <summary>
            Assuming that the two types are compatible, scores how well the types match.  0 is the best 
            match, worse matches are less than 0.
            </summary>
            <param name="toType">Type to be casted to.</param>
            <param name="fromType">Type of object to be casted.</param>
            <returns>A number indicating how well the given types match.  0 is the best match, worse matches are less than 0.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.DuckTyping.EmitCastIL(System.Reflection.Emit.ILGenerator,System.Type,System.Type)">
            <summary>
            Helps maintain consistent support for typing class members by centralizing the generation of IL
            that converts types.  Emits IL to perform whatever conversion is necessary from one type to 
            another.
            </summary>
            <param name="il">IL generator to use to emit the IL.</param>
            <param name="toType">Type to be casted to.</param>
            <param name="fromType">Type of object to be casted.</param>
        </member>
        <member name="M:DeftTech.DuckTyping.DuckTyping.CanNormalCast(System.Type,System.Type,System.Boolean)">
            <summary>
            Determines whether a given type can be casted to another type using normal casting.
            </summary>
            <param name="toType">Type to be casted to.</param>
            <param name="fromType">Type to be casted from.</param>
            <param name="bidirectional">If true, true will also be returned if normal casting is possible in reverse.</param>
            <returns>If the given type can normally be casted to the other given type, true; otherwise, false.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.DuckTyping.ShouldDuckCast(System.Type,System.Type)">
            <summary>
            Determines whether duck typing should be used to perform the given cast.  (As opposed to normal casting.)
            </summary>
            <param name="toType">Type to be casted to.</param>
            <param name="fromType">Type of object being casted.</param>
            <returns></returns>
        </member>
        <member name="T:DeftTech.DuckTyping.IDuckProxy">
            <summary>
            All duck proxy types implement this interface.  This interface should normally not be used by code
            outside the duck typing library.
            </summary>
        </member>
        <member name="M:DeftTech.DuckTyping.IDuckProxy.UnwrapDuck">
            <summary>
            Returns the duck object that the proxy is forwarding calls to.
            </summary>
            <returns>The duck object that the proxy is forwarding calls to.</returns>
        </member>
        <member name="T:DeftTech.DuckTyping.InterfaceStaticDuckCaster">
            <summary>
            Static duck casting strategy that casts a static type to an interface.
            </summary>
        </member>
        <member name="T:DeftTech.DuckTyping.IStaticDuckCaster">
            <summary>
            Interface for strategies of duck casting a static type.
            </summary>
        </member>
        <member name="M:DeftTech.DuckTyping.IStaticDuckCaster.ShouldStaticCast(System.Type,System.Type)">
            <summary>
            Determines whether this duck caster should be used to perform the given static cast.
            </summary>
            <param name="toType">Type to be casted to.</param>
            <param name="staticType">Static type to be casted.</param>
            <returns>If this duck caster should be used to perform the given static cast, true; otherwise, false.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.IStaticDuckCaster.CanStaticCast(System.Type,System.Type)">
            <summary>
            Determines whether a given static cast is valid.
            </summary>
            <param name="toType">Type to be casted to.</param>
            <param name="staticType">Static type to be casted.</param>
            <returns>If the given static cast is valid, true; otherwise, false.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.IStaticDuckCaster.PrepareStaticCast(System.Type,System.Type)">
            <summary>
            Prepares for a given static cast by performing all necessary overhead.
            </summary>
            <param name="toType">Type to be casted to.</param>
            <param name="staticType">Static type to be casted.</param>
        </member>
        <member name="M:DeftTech.DuckTyping.IStaticDuckCaster.StaticCast(System.Type,System.Type)">
            <summary>
            Performs a given static cast.
            </summary>
            <param name="toType">Type to be casted to.</param>
            <param name="staticType">Static type to cast.</param>
            <returns>The casted static type.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.InterfaceStaticDuckCaster.#cctor">
            <summary>
            Initializes static members.
            </summary>
        </member>
        <member name="M:DeftTech.DuckTyping.InterfaceStaticDuckCaster.#ctor">
            <summary>
            Constructs an object.
            </summary>
        </member>
        <member name="M:DeftTech.DuckTyping.InterfaceStaticDuckCaster.GetProxyType(System.Type,System.Type)">
            <summary>
            Gets the InterfaceDuckProxyType object for a given cast.
            </summary>
            <param name="interfaceType">Type to cast to.</param>
            <param name="duckType">Static type being casted.</param>
            <returns>The duck proxy type to use to cast or prepare for casting.</returns>
        </member>
        <member name="T:DeftTech.DuckTyping.ToTypeFromTypeTree`1">
            <summary>
            Tree to refer to from type trees by to type.
            </summary>
            <typeparam name="T">Type of object to store.</typeparam>
        </member>
        <member name="M:DeftTech.DuckTyping.ToTypeFromTypeTree`1.#ctor">
            <summary>
            Constructs an object.
            </summary>
        </member>
        <member name="M:DeftTech.DuckTyping.ToTypeFromTypeTree`1.ContainsKey(System.Type)">
            <summary>
            Determines whether a from type tree exists for the given from type.
            </summary>
            <param name="toType">To type to search for.</param>
            <returns>If a from type tree exists for the given to type, true; otherwise, false.</returns>
        </member>
        <member name="M:DeftTech.DuckTyping.ToTypeFromTypeTree`1.Add(System.Type,DeftTech.DuckTyping.FromTypeTree{`0})">
            <summary>
            Adds a from type tree to the to type tree.
            </summary>
            <param name="toType">To type for the from type tree.</param>
            <param name="fromTypeTree">The from type tree to add.</param>
        </member>
        <member name="M:DeftTech.DuckTyping.ToTypeFromTypeTree`1.GetKeyFromType(System.Type)">
            <summary>
            Gets the key to use to uniquely identify a given type in the internal tree.
            </summary>
            <remarks>
            This method is also in FromTypeTree, so don't forget to update it there 
            also if it is updated here.
            </remarks>
            <param name="type">Type to get the key of.</param>
            <returns>The key to use to uniquely identify the given type in the internal tree.</returns>
        </member>
        <member name="P:DeftTech.DuckTyping.ToTypeFromTypeTree`1.Item(System.Type)">
            <summary>
            Gets the from type tree for a given to type.
            </summary>
            <param name="toType">To type for the object.</param>
            <returns>The from type tree for the given from type.</returns>
        </member>
    </members>
</doc>
